#include "initmap.h"

InitMap::InitMap(QObject *parent) : 
    QThread(parent)
{

}
InitMap::~InitMap()
{
    delete map;
    delete img2_tag;
}

void InitMap::run(void)
{
    readMap();
}


void InitMap::readMap()
{
    int w=img1.width();
    int h=img1.height();
    for(int i=0;i<w;i++)
    {
        for(int j=0;j<h;j++)
        {
            QRgb t=img1.pixel(i,j);
            map[i][j].sr=qRed(t);
            map[i][j].sg=qGreen(t);
            map[i][j].sb=qBlue(t);

            img2_tag[i][j]=false;
        }
    }

    int n=0;
    int end=w*h;
    for(int i=0;i<w;i++)
    {
        for(int j=0;j<h;j++)
        {
            calMap(map[i][j]);
//            if(map[i][j].sr<200)
//            {
//                cout <<i<<":"<<j<<"-"<<map[i][j].ex<<" "<<map[i][j].ey<<" "<<map[i][j].sb<<" "<<map[i][j].eb<<endl;
//            }
            n++;
            progress=1.0*n/end;
            img1.setPixel(i,j,qRgb(map[i][j].er,map[i][j].eg,map[i][j].eb));
            emit updateProgress();
        }
    }
    emit complete();
}


int InitMap::colorDis(int dr,int db,int dg)
{
    double t=1.0*dr*dr+1.0*db*db+1.0*dg*dg;
    return (int)(sqrt(t));
}


void InitMap::calMap(Point &p)
{
    int dis=100000;
    int x=0,y=0;
    int tr=0,tb=0,tg=0;
    QRgb color;
    for(int i=0;i<img2.width();i++)
    {
        for(int j=0;j<img2.height();j++)
        {
            if(!img2_tag[i][j])
            {
                QRgb t=img2.pixel(i,j);
                tr=qRed(t)-p.sr;
                tg=qGreen(t)-p.sg;
                tb=qBlue(t)-p.sb;

                int d=colorDis(tr,tb,tg);
                if(d<dis)
                {
                    dis=d;
                    x=i;
                    y=j;
                    color=t;
                }
                if(d==0)
                {
                    p.eb=qBlue(t);
                    p.eg=qGreen(t);
                    p.er=qRed(t);
                    p.ex=i;
                    p.ey=j;
                    img2_tag[i][j]=true;
                    return ;
                }
            }
        }
    }

    p.eb=qBlue(color);
    p.eg=qGreen(color);
    p.er=qRed(color);
    p.ex=x;
    p.ey=y;
    img2_tag[x][y]=true;
}
